package com.sky.StockHelper.controller;

import com.sky.StockHelper.entity.User;
import com.sky.StockHelper.service.IUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author xcy
 * @version V1.0
 * @description
 * @date 2024/11/24 22:01
 */
@RequestMapping("/user")
@RestController
@RequiredArgsConstructor
// @RequiredArgsConstructor 自动生成一个构造器，其中包含所有的 final 字段，确保这些字段在对象创建时被初始化。这样可以使类更加简洁，并保持对依赖注入和不可变设计的支持。
public class UserController {

    //@Autowired // Field injection is not recommended 不建议字段注入
    //private IUserService userService;
    //上面两行直接通过字段注入方式将userService注入到当前类中，spring不推荐


    //不推荐使用字段注入，那么改成如下方式，改成构造器注入，将userService变成一个变量，并且是final修饰，
    // 一旦被final修饰，则必须在当前类UserController创建时，必须先给userService赋值。
    // 即保证被依赖的bean一定创建好
    //private final IUserService userService;
    // 使用lombok的注解@RequiredArgsConstructor来替换,lombok会自动生成这个构造器
    //public UserController(IUserService userService) {
    //    this.userService = userService;
    //}


    // 但是通过上面构造器注入时，每次都要写构造方法，很麻烦，因此可以使用lombok的注解@RequiredArgsConstructor来替换
    private final IUserService userService;

    @PostMapping("add")
    public void addUser(@RequestBody User user) {
        userService.save(user);
    }

    // 复杂条件查询用户
    @GetMapping("getUserByCondition")
    public List<User> getUserByCondition(User user) {
        return userService.getUserByCondition(user.getUserName(), user.getStatus(), user.getBalance());
    }

}
